coord: ranged1d: fix irrefutable if let warning#667
coord: ranged1d: fix irrefutable if let warning#667AaronErhardt merged 1 commit intoplotters-rs:masterfrom
Conversation
|
Thanks for your PR. fn from_index(&self, index: usize) -> Option<Self::ValueType> {
Self::ValueType::try_from(index)
.ok()
.and_then(|index| self.0.checked_add(index))
} |
I keep getting this annoying warning with rust 1.83:
warning: irrefutable `if let` pattern
--> plotters/src/coord/ranged1d/types/numeric.rs:29:20
|
29 | if let Ok(index) = Self::ValueType::try_from(index) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
365 | impl_discrete_trait!(RangedCoordusize);
| -------------------------------------- in this macro invocation
|
= note: this pattern will always match, so the `if let` is useless
= help: consider replacing the `if let` with a `let`
= note: `#[warn(irrefutable_let_patterns)]` on by default
= note: this warning originates in the macro `impl_discrete_trait` (in Nightly builds, run with -Z macro-backtrace for more info)
This is because the conversion of usize to ValueType always
passes, so we don't need the try_from() in all cases.
An additional problem are potential overflows so we use
checked_add() which returns None if the addition fails,
thus also avoiding the irrefutable let pattern while also
protecting against overflows.
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
43990c4 to
dd806bd
Compare
|
Thanks @booti386 I've updated the PR with your suggestion. @AaronErhardt Can we please land this? It's been waiting for some while now. The failing checks seem to be unrelated. |
I keep getting this annoying warning with rust 1.83:
warning: irrefutable
if letpattern--> plotters/src/coord/ranged1d/types/numeric.rs:29:20
|
29 | if let Ok(index) = Self::ValueType::try_from(index) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
365 | impl_discrete_trait!(RangedCoordusize);
| -------------------------------------- in this macro invocation
|
= note: this pattern will always match, so the
if letis useless= help: consider replacing the
if letwith alet= note:
#[warn(irrefutable_let_patterns)]on by default= note: this warning originates in the macro
impl_discrete_trait(in Nightly builds, run with -Z macro-backtrace for more info)This is because the conversion of usize to ValueType always passes, so we don't need the try_from().
The problem with this operation is not the conversion which always succeeds, instead it is the potential overflows, so we use checked_add() which returns None if the addition fails.